Amadeus's Studio.

哈希算法-加密-编码

字数统计: 454阅读时长: 1 min
2019/02/28 Share

哈希算法 - 加密 - 编码

哈希算法 - 哈希摘要 - 数字签名 - 防篡改/保护敏感信息
哈希算法是一个单向运算的函数(单向哈希函数)
通过哈希算法可以将对象计算出哈希摘要但是哈希摘要无法还原成原来的对

Martin flower -代码有很多味道重复是最坏的一种
重构(refactor)

策略模式
加密解密 - 明文 —- 加密 —–> 密文 —- 解密 —–> 明文
对称加密 - 加密和解密使用同一个密钥 - AES
非对称加密 - 加密和解密使用不同的密钥(公钥和私钥)- RSA
pip install pycrypto

编码和解码 - 将内存中的二进制数据处理成其他的格式 - BASE64
BASE64 - 用64个字符(a-zA-Z0-9/+)表二进制数据示所有的

编码黑洞

中文/日文 –>iso -8859 -1 Latin –> ??

乱码 –>编码和解码的时候没用使用相同的字符集

utf-8 -Unicode的一种变长实现方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

import hashlib


class StreamHasher(object):
"""docstring for streamHasher"""
def __init__(self, algorithm='md5', size=4096):
self.size = size
alg = algorithm.lower()
if alg =='md5':
self.hasher = hashlib.md5()
elif alg == 'sha1':
self.hasher = hashlib.sha1()
elif alg == 'sha256':
self.hasher = hashlib.sha256()
elif alg == sha512:
self.hasher = hashlib.sha512()
else:
raise ValueError('不支持指定的哈希算法')


# __call__ -魔术方法,调用对象的时候调用该方法
def __call__(self,stream):
return self.to_digest(stream)


def to_digest(self, stream):
'''生成MD5摘要'''
# b" 终止符,读文本文件终止符 ''
hasher = self.hasher
for buf in iter(lambda:stream.read(self.size), b''):
hasher.update(b)
# 16进制的md摘要
return hasher.hexdigest()



def to_sha256_digest(stream, block_size = 4096):
'''生成MD5摘要'''
# b" 终止符,读文本文件终止符 ''
hasher = hashlib.sha256()
for buf in iter(lambda:stream.read(4096), b''):
hasher.update(b)
# 16进制的md摘要
return hasher.hexdigest()


def main():
hasher = hashlib.md5()
with open('aaa.png', 'rb') as f:
sh = StreamHasher()
print(sh.to_digest(f))


if __name__ == '__main__':
main()
CATALOG
  1. 1. 哈希算法 - 加密 - 编码